import { useUserStoreHook } from '@/store/modules/user'
import router from './index'
import { usePermissionStoreHook } from '@/store/modules/permission'

const whiteList = ['/login', '/']

const permissionStore = usePermissionStoreHook()

router.beforeEach(async (to, from, next) => {
  const hasToken = localStorage.getItem('accessToken')
  if (hasToken) {
    // 存在token
    if (to.path === '/login') {
      // 已经登录,跳转到首页
      next('/')
    } else {
      // 检验是否有角色信息
      const userStore = useUserStoreHook()
      const hasRoles = userStore.user.roles && userStore.user.roles.length > 0
      if (hasRoles) {
        // 存在角色信息,看路由是否匹配
        if (to.matched.length === 0) {
          // 不匹配：看从哪里跳转的，返回原来的,没有则跳转404
          from.name ? next({ name: from.name }) : next('/404')
        } else {
          // 匹配：跳转
          next()
        }
      } else {
        // 不存在角色信息,获取角色信息
        const { roles } = await userStore.getUserInfo()
        // 生成路由表
        const accessRoutes = await permissionStore.generateRoutes(roles)
        // 动态添加可访问路由表
        accessRoutes.forEach((route) => {
          router.addRoute(route)
        })
        // 再次跳转
        next({ ...to, replace: true })
      }
    }
  } else if (whiteList.indexOf(to.path) !== -1) {
    // 不存在token,可以访问白名单
    next()
  } else {
    // 访问不是白名单,跳转到登录页
    next('/login')
  }
})

router.afterEach((to, from) => {})
